from django import http
from django.core.cache import cache
from django.shortcuts import render

# Create your views here.
from django.views import View

from apps.areas.models import Area
from utils.response_code import RETCODE
# from utils.views import LoginRequiredJSONMixin

"""
需求：
１．省的信息获取，市区县信息获取分开
２．当省的信息发生变化的时候，我们再取　市区县的信息
３．如何区分　　省，市区县信息，就是通过前端传递的area_id

后端大体步骤：
请求方式　　路由  areas/
# １．接收area_id


        # ２．如果有area_id，则查询市区县数据
        # ３．如果没有，则查询　　省的数据
优化：
为什么使用缓存：
    １．数据经常被访问到
    ２．数据不经常（相对的）发生变化
缓存的业务逻辑：

"""
class AreaView(View):

    def get(self,requeset):
        # １．接收area_id
        area_id = requeset.GET.get('area_id')
        if area_id is not None:
            # 先从缓存中获取，获取之后进行判断
            sub_list=cache.get('sub_area_%s'%area_id)
            if sub_list is None:

                # ２．如果有area_id，则查询市区县数据
                # 2.1根据area_id获取市区县信息
                areas = Area.objects.filter(parent_id=area_id)

                # 2.2对　　对象列表进行转换来获取字典列表
                sub_list = []
                for area in areas:
                    sub_list.append({
                        'id': area.id,
                        'name': area.name,
                    })

                # cache.set(key,value,exprie)
                cache.set('sub_area_%s'%area_id, sub_list,24*3600)
            return http.JsonResponse({'code':RETCODE.OK,'errmsg':'ok','sub_list':sub_list})

        else:
            #　先查询缓存
            pro_list = cache.get('pro_list')
            # 如果有缓存，则直接使用缓存
            if pro_list is None:

                pass
                # ３．如果没有，则查询　　省的数据
                areas = Area.objects.filter(parent=None)
                # 4.将对象列表转换为字典列表
                pro_list = []
                for area in areas:
                    pro_list.append({
                        'id':area.id,
                        'name':area.name,
                    })
                # 把查询的数据放到缓存里
                # １．可以直接使用ｒｅｄｉｓ操作
                # ２．from django.core.cache import cache
                #             cache(key,value,expire)
                cache.set('pro_list', pro_list, 24*3600)

            # 我们不能直接将对象列表／对象直接传递给JsonResponse
            # JsonResponse只返回字典数据
            # 省市区数据，实现局部刷新，使用json数据，ａｊａｘ
            return http.JsonResponse({'code':RETCODE.OK,'errmsg':'ok','provinces':pro_list})


